import { PageOptions } from '@graphcommerce/framer-next-pages' import { getProductStaticPaths, jsonLdProduct, jsonLdProductOffer, ProductAddToCart, productPageCategory, ProductPageGallery, ProductPageMeta, ProductSidebarDelivery, ProductWeight, } from '@graphcommerce/magento-product' import { SimpleProductPageDocument, SimpleProductPageQuery, } from '@graphcommerce/magento-product-simple' import { jsonLdProductReview, ProductReviewChip } from '@graphcommerce/magento-review' import { StoreConfigDocument } from '@graphcommerce/magento-store' import { GetStaticProps, JsonLd, Title } from '@graphcommerce/next-ui' import { Typography } from '@material-ui/core' import { GetStaticPaths } from 'next' import React from 'react' import { Product } from 'schema-dts' import FullPageShell, { FullPageShellProps } from '../../components/AppShell/FullPageShell' import FullPageShellHeader from '../../components/AppShell/FullPageShellHeader' import { ProductPageDocument, ProductPageQuery } from '../../components/GraphQL/ProductPage.gql' import ProductUsps from '../../components/ProductUsps' import ProductpagesContent from '../../components/ProductpagesContent' import RowProductDescription from '../../components/Row/RowProductDescription' import RowProductFeature from '../../components/Row/RowProductFeature' import RowProductFeatureBoxed from '../../components/Row/RowProductFeatureBoxed' import RowProductRelated from '../../components/Row/RowProductRelated' import RowProductReviews from '../../components/Row/RowProductReviews' import RowProductSpecs from '../../components/Row/RowProductSpecs' import RowProductUpsells from '../../components/Row/RowProductUpsells' import apolloClient from '../../lib/apolloClient' export const config = { unstable_JsPreload: false } type Props = ProductPageQuery & SimpleProductPageQuery & Pick type RouteProps = { url: string } type GetPageStaticPaths = GetStaticPaths type GetPageStaticProps = GetStaticProps function ProductSimple(props: Props) { const { products, usps, sidebarUsps, typeProducts, productpages, backFallbackHref, backFallbackTitle, } = props const product = products?.items?.[0] const typeProduct = typeProducts?.items?.[0] const aggregations = typeProducts?.aggregations if (product?.__typename !== 'SimpleProduct' || typeProduct?.__typename !== 'SimpleProduct') return
return ( <> {product.name} item={{ '@context': 'https://schema.org', ...jsonLdProduct(product), ...jsonLdProductOffer(product), ...jsonLdProductReview(product), }} /> {product.name} } /> , RowProductFeatureBoxed: (rowProps) => ( ), RowProductSpecs: (rowProps) => ( ), RowProductReviews: (rowProps) => , RowProductRelated: (rowProps) => , RowProductUpsells: (rowProps) => , }} content={productpages?.[0].content} /> ) } ProductSimple.pageOptions = { SharedComponent: FullPageShell, } as PageOptions export default ProductSimple export const getStaticPaths: GetPageStaticPaths = async ({ locales = [] }) => { if (process.env.NODE_ENV === 'development') return { paths: [], fallback: 'blocking' } const path = (locale: string) => getProductStaticPaths(apolloClient(locale), locale, 'SimpleProduct') const paths = (await Promise.all(locales.map(path))).flat(1) return { paths, fallback: 'blocking' } } export const getStaticProps: GetPageStaticProps = async ({ params, locale }) => { const client = apolloClient(locale, true) const staticClient = apolloClient(locale) const urlKey = params?.url ?? '??' const productUrls = [`product/${urlKey}`, 'product/global'] const conf = client.query({ query: StoreConfigDocument }) const productPage = staticClient.query({ query: ProductPageDocument, variables: { urlKey, productUrls, rootCategory: (await conf).data.storeConfig?.root_category_uid ?? '', }, }) const typeProductPage = staticClient.query({ query: SimpleProductPageDocument, variables: { urlKey }, }) if ( (await productPage).data.products?.items?.[0]?.__typename !== 'SimpleProduct' || (await typeProductPage).data.typeProducts?.items?.[0]?.__typename !== 'SimpleProduct' ) { return { notFound: true } } const category = productPageCategory((await productPage).data?.products?.items?.[0]) return { props: { ...(await productPage).data, ...(await typeProductPage).data, apolloState: await conf.then(() => client.cache.extract()), backFallbackHref: category?.url_path ? `/${category?.url_path}` : null, backFallbackTitle: category?.name ?? null, }, revalidate: 60 * 20, } }